﻿/*
 * Created by SharpDevelop.
 * User: Usuario
 * Date: 16/10/2011
 * Time: 09:17 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Drawing;
using System.Windows.Forms;
using Business_Entity;
using Business_Logic;
using System.Collections.Generic;

namespace PetSoft.GUI.GestRecursos
{
	/// <summary>
	/// Description of GUIDetallesPedAbast.
	/// </summary>
	public partial class GUIDetallesPedAbast : Form
	{
		private BEPedidoAbastecimiento pedido; 
		public int eliminaPedido = 0;
		private List<BEProveedor> listaProveedor;
		
		public GUIDetallesPedAbast(BEPedidoAbastecimiento ped, String estPedido)
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			this.agreBTN.Enabled = false;
            this.prodPedDetBTN.Enabled = false;
            this.prodQuitarBTN.Enabled = false;
                        
                
            for (int i=0;i<BLInfo.usuarioActual.Rol.Privilegio.Count;i++){
                if ((new BLPrivilegio()).existePrivilegio(2,"GREC","PEDP",BLInfo.UsuarioActual.Rol.Privilegio)){
                    this.agreBTN.Enabled = true;
                    this.prodPedDetBTN.Enabled = true;
                    this.prodQuitarBTN.Enabled = true;
                        
                }                
            }
			this.pedido = ped;
			if(this.pedido.Estado.Codigo!=3){
				this.agreBTN.Enabled = false;
				this.prodQuitarBTN.Enabled = false;
			}
			this.Load += new EventHandler(cargaTablaGUI);
			if(estPedido!="SOLICITADO"){
				this.agreBTN.Enabled = false;
				this.prodQuitarBTN.Enabled = false;
				this.prodPedDetBTN.Enabled = false;
			}
			this.listProdTBL.DoubleClick += new EventHandler(doble_click);
			this.codPedValLBL.Text = "" + this.pedido.Codigo;
			this.fecPedValLBL.Text = String.Format("{0:dd/MM/yyyy}", DateTime.Parse(this.pedido.Fecha.ToShortDateString()));
			this.tienPedValLBL.Text = this.pedido.Tienda.Nombre;
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
		}
		
		private void doble_click(object sender, EventArgs e){
			int aux = this.listProdTBL.CurrentRow.Index;
			if(((bool)this.listProdTBL[0, aux].Value) == true){
				this.listProdTBL[0, aux].Value = false;
			}
			else{
				this.listProdTBL[0, aux].Value = true;
			}
		}
		
		private void cargaTabla(){
			String nomProv;
			List<BELineaPedidoAbastecimiento> detallePedFinal = new List<BELineaPedidoAbastecimiento>();
			this.listProdTBL.Rows.Clear();
			BLProveedor prov = new BLProveedor();
			BLPedidoAbastecimiento blped = new BLPedidoAbastecimiento();
			List<BELineaPedidoAbastecimiento> detallePed = new List<BELineaPedidoAbastecimiento>();
			BLProducto blProd = new BLProducto();
			detallePed = blped.getDetalleByCod(this.pedido.Codigo);
			this.pedido.Detalle = detallePed;
			foreach (BELineaPedidoAbastecimiento linea in this.pedido.Detalle) {
			  	BEProveedor pr = blProd.getProveedorByCod(linea.Proveedor.IdProv);
			   	//MessageBox.Show("Detallesfdasdfd:" + linea.Proveedor.IdProv);
			   	linea.Proveedor = pr;
			   	List<BEProducto> pd = blProd.getProductoByCod(linea.Producto.Codigo);
			  	linea.Producto = pd[0];
			   	detallePedFinal.Add(linea);
			}
			   //BEProveedor p = prov.BuscarProveedor(1);
			   //MessageBox.Show("Detalles:" + p.RazonSocial);
			this.pedido.Detalle = detallePedFinal;
			foreach (BELineaPedidoAbastecimiento p in pedido.Detalle) {
				if(p.Proveedor!=null){
					nomProv = p.Proveedor.RazonSocial;
				}
				else{
					nomProv = "No se seleccionó ningún proveedor.";
				}
				this.listProdTBL.Rows.Add(false, "" + p.Producto.Codigo, "" + p.Producto.Nombre, nomProv, "" + p.Cantidad);
			}
		}
		
		private void cargaTablaGUI(object sender, EventArgs e){
			cargaTabla();
		}
		
		void EliCBCOLCheckedChanged(object sender, EventArgs e)
		{
			for(int i=0; i<this.listProdTBL.RowCount; i++){
        		this.listProdTBL[0, i].Value = this.eliCBCOL.Checked;
				//list[0, i].Value = ((CheckBox) list.Controls.Find("checkboxHeader", true)[0]).Checked;    		
        	}
		}
				
		void ProdPedCancBTNClick(object sender, EventArgs e)
		{
			this.Close();
		}
		
		void ProdQuitarBTNClick(object sender, EventArgs e)
		{
			int cont, contAux;
            cont = 0;
            contAux = 0;
            for(int i=0; i<this.listProdTBL.RowCount;i++){
            	if((this.listProdTBL[0,i].Value!=null) && (Convert.ToBoolean(this.listProdTBL[0,i].Value) == true)){
            		cont++;
            	}            	
            }
            if(cont==0){
            	Utils.MessageAviso("Debe seleccionar algún producto para eliminar.",null);
            }
            else{
            	DialogResult res;            	
            	if(cont==1){
            		res = MessageBox.Show("Está seguro que desea eliminar el producto seleccionado?", "Ventana de Confirmacion", MessageBoxButtons.YesNo);
            	}
            	else{
            		res = MessageBox.Show("Está seguro que desea eliminar los " + cont + " productos seleccionados?", "Ventana de Confirmacion", MessageBoxButtons.YesNo);
            	}
            	if (res == DialogResult.Yes){
            		if(cont==this.listProdTBL.RowCount){
            			this.eliminaPedido = 1;
            		}
            		for(int i=0; i<this.listProdTBL.RowCount;i++){
            			if((this.listProdTBL[0,i].Value!=null) && (Convert.ToBoolean(this.listProdTBL[0,i].Value) == true)){
            				int codLinea = this.listProdTBL.CurrentRow.Index + 1;
            				int codPed = this.pedido.Codigo;
           					BLLineaPedidoAbastecimiento linea = new BLLineaPedidoAbastecimiento();
            				if (linea.eliminaLineaPedido(codLinea, codPed) == 1){
            					contAux++;
                			}
            			}            	
            		}
            		if(cont == contAux){
            			if(cont==1){
                    		Utils.MessageInformation("El producto fue eliminado correctamente."); 
            			}
            			else{
                    		Utils.MessageInformation("Los " + cont + " productos seleccionados fueron eliminados correctamente."); 
            			}
                    	cargaTabla();           		
            		}
            		else{
                    	Utils.MessageInformation("No se puedo eliminar " + contAux + " productos de los " + cont + " seleccionados.");            		
            		}
            	}
            	else {
            	}
            }
		}
		
		
		void ProdPedDetBTNClick(object sender, EventArgs e)
		{
			int cont = 0, index=0;
			BLProducto blProd = new BLProducto();
			BEProducto prod = new BEProducto();
			
			for(int i=0; i<this.listProdTBL.RowCount; i++){
				if((this.listProdTBL[0,i].Value!=null) && (Convert.ToBoolean(this.listProdTBL[0,i].Value) == true)){
					cont++;
					index = i;
				}
			}
			if(cont==0){
				Utils.MessageAviso("Debe seleccionar algún producto para editar.",null);
			}
			if(cont>1){
				Utils.MessageAviso("Debe seleccionar solo 1 producto para editar.",null);
			}
			if(cont==1){
				//se permite la modificación del producto
				int codProd = Int32.Parse(this.listProdTBL[1,index].Value.ToString());
				String prov = this.listProdTBL[3,index].Value.ToString();
				prod = blProd.getProductoByCod(codProd)[0];
				int cant = Int32.Parse(this.listProdTBL[4,index].Value.ToString());
				this.listaProveedor = new List<BEProveedor>();
				GUIDatosProductoPedido vent = new GUIDatosProductoPedido(1,prod, prov, cant, this.listaProveedor);
				vent.ShowDialog();
				BLLineaPedidoAbastecimiento lPed = new BLLineaPedidoAbastecimiento();
				try{
					int resMod = lPed.modificaLineaPedido(this.pedido.Codigo, index + 1, vent.getProveedor().IdProv, vent.getCantidad(), 0, 0,3);
					if(resMod==1)
						Utils.MessageAviso("Los cambios fueron guardados correctamente.",null);
					else
						Utils.MessageAviso("Hubo un error y no se pudieron guardar los cambios.",null);
					this.listProdTBL[4,index].Value = vent.getCantidad();
					this.listProdTBL[3,index].Value = vent.getProveedor().RazonSocial;
				}
				catch{
				}
			}
		}
		
		void AgreBTNClick(object sender, EventArgs e)
		{
			PetSoft.GestionRecursos.MProductos v = new PetSoft.GestionRecursos.MProductos(2);
			v.ShowDialog();
			try{
				BEProducto prod = v.getProductosSeleccionados()[0];
				GUIDatosProductoPedido  vent = new GUIDatosProductoPedido(1, prod, "", 0, this.listaProveedor);
				vent.ShowDialog();
				BEProveedor prov = vent.getProveedor();
				BLLineaPedidoAbastecimiento blLinea = new BLLineaPedidoAbastecimiento();
				MessageBox.Show("Res: " +  prod.Codigo);
				int res = blLinea.nuevaLineaPedido(this.pedido.Codigo, prod.Codigo, prov.IdProv, vent.getCantidad());
				if(res==1){
					Utils.MessageAviso("El producto fue agregado correctamente al pedido.",null);
					cargaTabla();
				}
				else{
					Utils.MessageError("Hubo un error y no se pudo agregar el producto al pedido.",null);
				}
			}
			catch{
			}
		}
	}
}
